// ProjectName: go-learn-demo
// PackageName: _1_basic
// Description:
// Author: hy.bai
// Date: 2025-08-19 星期二 11:44

package xormybxb

import (
	"encoding/json"
	"errors"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"log/slog"
)

// 查询所有数据
func TestFind() {
	// 初始化Mysql数据库引擎
	InitEngine()
	// 直接执行sql语句
	var userList = make([]User, 0)
	if err := MysqlEngine.Table("t_user").Find(&userList); err != nil {
		slog.Error("查询失败,原因是:", err.Error())
	}
	for _, user := range userList {
		data, _ := json.Marshal(user)
		fmt.Println(string(data))
	}
}

func TestQueryList() {
	// 初始化Mysql数据库引擎
	InitEngine()
	// 直接执行sql语句
	var userList = make([]User, 0)
	if err := MysqlEngine.Table("t_user").Cols("id", "username", "age").Where("username like ?", "%ybxb%").Find(&userList); err != nil {
		slog.Error("查询失败,原因是:", err.Error())
	}
	for _, user := range userList {
		data, _ := json.Marshal(user)
		fmt.Println(string(data))
	}
}

func TestIterate() {
	// 初始化Mysql数据库引擎
	InitEngine()

	err := MysqlEngine.Table("t_user").Iterate(&User{}, func(idx int, bean any) error {
		user, has := bean.(*User)
		if has {
			fmt.Println("逐个查询用户:", user)
			return nil
		}
		return errors.New("bean的类型不是User")
	})
	fmt.Println(err)
}

func TestRows() {
	// 初始化Mysql数据库引擎
	InitEngine()
	rows, err := MysqlEngine.Table("t_user").Rows(&User{})
	if err != nil {
		slog.Error(fmt.Sprintf("查询失败,原因是:%s", err.Error()))
		return
	}
	defer rows.Close()

	user := User{}
	for rows.Next() {
		err = rows.Scan(&user)
		data, _ := json.Marshal(user)
		fmt.Println(string(data))
	}
}
